home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 4 / CDPD_IV.bin / e / mailinglists / amigae.0294feb.archive / 000031_donews!crash!rb…rmstadt.de!anh_Tue, 8 Feb 94 07:46:43 PST.msg < prev    next >
Internet Message Format  |  1994-05-26  |  47KB

  1. Received: by bkhouse.cts.com (V1.17-beta/Amiga)
  2.       id <1rgl@bkhouse.cts.com>; Tue, 8 Feb 94 07:46:43 PST
  3. Received: from crash by donews.cts.com with uucp
  4.     (Smail3.1.28.1 #18) id m0pTeMY-0001NlC; Mon, 7 Feb 94 14:23 PST
  5. Received: from rbhp89.rbg.informatik.th-darmstadt.de by crash.cts.com with smtp
  6.     (Smail3.1.28.1 #18) id m0pTWIR-00011XC; Mon, 7 Feb 94 05:46 PST
  7. Received: from rbhp48.rbg.informatik.th-darmstadt.de by rbhp89.rbg.informatik.th-darmstadt.de with SMTP
  8.     (1.36.108.4/15.6) id AA16024; Mon, 7 Feb 1994 14:46:47 +0100
  9. Received: by rbhp48.rbg.informatik.th-darmstadt.de
  10.     (1.36.108.4/15.6) id AA04970; Mon, 7 Feb 1994 14:46:16 +0100
  11. Message-Id: <m0pTWIR-00011XC@crash.cts.com>
  12. Date: Mon, 7 Feb 94 14:46:15 MEZ
  13. Full-Name: Olivier Anh
  14. In-Reply-To: <940203183516.204136b3@iccgcc.cs.hh.ab.com>; from "THORNTONJ@beast.cs.hh.ab.com" at Feb 3, 94 6:35 pm
  15. Mailer: Elm [revision: 66.25]
  16. From: Olivier Anh <anh@rbhp56.rbg.informatik.th-darmstadt.de>
  17. To: AmigaE@bkhouse.cts.com (The AmigaE Mailing List)
  18. Subject: Re: Help with screens
  19.  
  20. Hi Jessie !
  21.  
  22. >   Just a quick question. How do you get windows and cons to
  23. > open up on a screen that is opened with OpenS().
  24.  
  25. The only way I know is avalaible under 2.0. You must open a Public Screen. Then
  26. open a file with Open() named for example 'CON:0/0/640/100/Shell'.
  27. I don't know the possibility of the new 2.0 shell ( I mean options like /CLOSE
  28. /WAIT...) there is probably a /PUBLIC option...
  29. Under 1.3, opening a shell on a private screen (only the WB is public) is not
  30. possible. Or I don't know how to do :)
  31.  
  32. Bye,...
  33.  
  34.  
  35.  
  36. --
  37. -------------------------------------------------------------------------------
  38.    / / Olivier ANH   (ERAMUS Student)     |' And may the Force be with You ! '
  39. \ X /  anh@rbg.informatik.th-darmstadt.de |             - Return of the Jedi -
  40. -------------------------------------------------------------------------------
  41. From donews!crash!rbhp56.rbg.informatik.th-darmstadt.de!anh Tue, 8 Feb 94 07:46:52 PST
  42. Received: by bkhouse.cts.com (V1.17-beta/Amiga)
  43.       id <1rgq@bkhouse.cts.com>; Tue, 8 Feb 94 07:46:52 PST
  44. Received: from crash by donews.cts.com with uucp
  45.     (Smail3.1.28.1 #18) id m0pTeMb-0001o1C; Mon, 7 Feb 94 14:23 PST
  46. Received: from rbhp89.rbg.informatik.th-darmstadt.de by crash.cts.com with smtp
  47.     (Smail3.1.28.1 #18) id m0pTWNZ-0000WmC; Mon, 7 Feb 94 05:51 PST
  48. Received: from rbhp48.rbg.informatik.th-darmstadt.de by rbhp89.rbg.informatik.th-darmstadt.de with SMTP
  49.     (1.36.108.4/15.6) id AA16051; Mon, 7 Feb 1994 14:52:10 +0100
  50. Received: by rbhp48.rbg.informatik.th-darmstadt.de
  51.     (1.36.108.4/15.6) id AA04998; Mon, 7 Feb 1994 14:51:40 +0100
  52. Message-Id: <m0pTWNZ-0000WmC@crash.cts.com>
  53. Date: Mon, 7 Feb 94 14:51:39 MEZ
  54. Full-Name: Olivier Anh
  55. In-Reply-To: <m0pR7aD-00000xC@crash.cts.com>; from "3NDS3" at Jan 31, 94 5:52 pm
  56. Mailer: Elm [revision: 66.25]
  57. From: Olivier Anh <anh@rbhp56.rbg.informatik.th-darmstadt.de>
  58. To: AmigaE@bkhouse.cts.com (The AmigaE Mailing List)
  59. Subject: Re: New Project! C2E!
  60.  
  61. Hi Dave 
  62.  
  63. You write :
  64. > Is there any way right now to type in an equivalent OBJECT to the C structure
  65. > and then convert that ASCII file to a .m module? Otherwise it becomes a bit
  66. > of a pain to use E, since I learn best through hacking with sample code, and
  67. > all the sample code for this stuff is in C.
  68.  
  69. Well dave, I did this for the IntuiSup.library. I tranlated the .h into .m
  70. via the includes (.i). A friend of mine (Lionel, in this ML) convert me
  71. this .h file into .i, Then I modified some C structure and constant definition
  72. for my own use. Finally I compile this .i file with Iconvert (which needs
  73. A68K and the C includes) into an E module.. That's it !
  74. The most difficult is to convert the .h into .i. I don't have any C compiler...
  75.  
  76. Hope this helps...
  77.  
  78.  
  79. --
  80. -------------------------------------------------------------------------------
  81.    / / Olivier ANH   (ERAMUS Student)     |' And may the Force be with You ! '
  82. \ X /  anh@rbg.informatik.th-darmstadt.de |             - Return of the Jedi -
  83. -------------------------------------------------------------------------------
  84. From donews!crash!rbhp56.rbg.informatik.th-darmstadt.de!anh Tue, 8 Feb 94 07:47:01 PST
  85. Received: by bkhouse.cts.com (V1.17-beta/Amiga)
  86.       id <1rgv@bkhouse.cts.com>; Tue, 8 Feb 94 07:47:01 PST
  87. Received: from crash by donews.cts.com with uucp
  88.     (Smail3.1.28.1 #18) id m0pTeMd-0001P9C; Mon, 7 Feb 94 14:23 PST
  89. Received: from rbhp89.rbg.informatik.th-darmstadt.de by crash.cts.com with smtp
  90.     (Smail3.1.28.1 #18) id m0pTWSz-0000MZC; Mon, 7 Feb 94 05:57 PST
  91. Received: from rbhp48.rbg.informatik.th-darmstadt.de by rbhp89.rbg.informatik.th-darmstadt.de with SMTP
  92.     (1.36.108.4/15.6) id AA16082; Mon, 7 Feb 1994 14:56:15 +0100
  93. Received: by rbhp48.rbg.informatik.th-darmstadt.de
  94.     (1.36.108.4/15.6) id AA05020; Mon, 7 Feb 1994 14:55:50 +0100
  95. Message-Id: <m0pTWSz-0000MZC@crash.cts.com>
  96. Date: Mon, 7 Feb 94 14:55:49 MEZ
  97. Full-Name: Olivier Anh
  98. In-Reply-To: <199402011022.KAA05246@archiduc.irit.fr>; from "Lionel VINTENAT" at Feb 1, 94 10:22 am
  99. Mailer: Elm [revision: 66.25]
  100. From: Olivier Anh <anh@rbhp56.rbg.informatik.th-darmstadt.de>
  101. To: AmigaE@bkhouse.cts.com (The AmigaE Mailing List)
  102. Subject: Re: Mac2E for 1.3 users
  103.  
  104. Hi Lionel !
  105.  
  106. >     Mac2E v3.0 is finished, and I'm now working on the docs. It is far more
  107. > better (faster above all) then the 2.0 one. But I will tell you its new features
  108. > when I'll put it on aminet (next week I hope).
  109. Good news !!! But under 1.3 too ?
  110.  
  111. >     For the moment, my problem is that Mac2E still needs Workbench 2.0+ to
  112. > run. So, I ask myself if someone is interested by a 1.3 version. If it is, let
  113. Meeeeeeeeeeeeee, I want a 1.3 versions..... :))))
  114.  
  115. >     I've already think about a 1.3 version. My problem is to emulate the
  116. > ReadArgs() function. To do this, I thought to use the arp.library.
  117. No, try to use the built-in variable 'arg' !
  118. > So I got
  119. > it from aminet yesterday. But when I extrated the docs, I found out that the
  120. > aminet version is only for 2.0 Kickstart, ARGGGGGGGGGG :-( But I'm sure that
  121. > the versions above 39 are for 1.3 kickstart.
  122.  
  123. The V39 of arp.library is for 1.3 users. The v40 is for 2.x users...)
  124.  
  125. > So, is any of you knows where I can
  126. > find v39 arp.library ? 
  127. I can send you the whole disc of ARP... Just tell me !
  128.  
  129. > Perhaps, somebody owns it ! Third solution : is any of
  130. > you successed in making a ReadArgs() emulation for 1.3 ?
  131. I don't yet !!!
  132.  
  133.  
  134. --
  135. -------------------------------------------------------------------------------
  136.    / / Olivier ANH   (ERAMUS Student)     |' And may the Force be with You ! '
  137. \ X /  anh@rbg.informatik.th-darmstadt.de |             - Return of the Jedi -
  138. -------------------------------------------------------------------------------
  139. From donews!crash!dcs.gla.ac.uk!mccracal Tue, 8 Feb 94 07:47:11 PST
  140. Received: by bkhouse.cts.com (V1.17-beta/Amiga)
  141.       id <1rh0@bkhouse.cts.com>; Tue, 8 Feb 94 07:47:11 PST
  142. Received: from crash by donews.cts.com with uucp
  143.     (Smail3.1.28.1 #18) id m0pTeMf-0001OoC; Mon, 7 Feb 94 14:23 PST
  144. Received: from vanuata.dcs.gla.ac.uk by crash.cts.com with smtp
  145.     (Smail3.1.28.1 #18) id m0pTWTC-00015lC; Mon, 7 Feb 94 05:57 PST
  146. Received: from agattu.dcs.gla.ac.uk by goggins.dcs.gla.ac.uk 
  147.           with LOCAL SMTP (PP) id <29843-0@goggins.dcs.gla.ac.uk>;
  148.           Mon, 7 Feb 1994 13:57:30 +0000
  149. Received: by agattu.dcs.gla.ac.uk (4.1/Dumb) id AA08772;
  150.           Mon, 7 Feb 94 13:57:21 GMT
  151. Date: Mon, 7 Feb 94 13:57:21 GMT
  152. Message-Id: <9402071357.AA08772@agattu.dcs.gla.ac.uk>
  153. From: mccracal@dcs.gla.ac.uk
  154. To: amigae@bkhouse.cts.com
  155. Subject: Complete function list for Amiga-E
  156.  
  157. Does anyone have a list of all the functions provided by AmigaE. The 
  158. documentation seems to leave out some functions like StringF() which I
  159. only found out about by reading someone elses code.
  160.  
  161. Thanks in advance
  162.     Alex McCracken
  163. Weinberg's Second Law:
  164.     If builders built buildings the way programmers wrote programs,
  165. then the first woodpecker that came along would destroy civilization!
  166. From donews!crash!rbhp56.rbg.informatik.th-darmstadt.de!anh Tue, 8 Feb 94 07:47:24 PST
  167. Received: by bkhouse.cts.com (V1.17-beta/Amiga)
  168.       id <1rh8@bkhouse.cts.com>; Tue, 8 Feb 94 07:47:24 PST
  169. Received: from crash by donews.cts.com with uucp
  170.     (Smail3.1.28.1 #18) id m0pTeMk-0001UFC; Mon, 7 Feb 94 14:23 PST
  171. Received: from rbhp89.rbg.informatik.th-darmstadt.de by crash.cts.com with smtp
  172.     (Smail3.1.28.1 #18) id m0pTWxe-00002ZC; Mon, 7 Feb 94 06:29 PST
  173. Received: from rbhp48.rbg.informatik.th-darmstadt.de by rbhp89.rbg.informatik.th-darmstadt.de with SMTP
  174.     (1.36.108.4/15.6) id AA16747; Mon, 7 Feb 1994 15:29:12 +0100
  175. Received: by rbhp48.rbg.informatik.th-darmstadt.de
  176.     (1.36.108.4/15.6) id AA05219; Mon, 7 Feb 1994 15:28:46 +0100
  177. Message-Id: <m0pTWxe-00002ZC@crash.cts.com>
  178. Date: Mon, 7 Feb 94 15:28:45 MEZ
  179. Full-Name: Olivier Anh
  180. Mailer: Elm [revision: 66.25]
  181. From: Olivier Anh <anh@rbhp56.rbg.informatik.th-darmstadt.de>
  182. To: amigae@bkhouse.cts.com
  183. Subject: IntuiSup.doc Addendum
  184.  
  185. Hi all,
  186.  
  187. I post this time a new version of my doc about the IntuiSup...
  188. I added a section about the locale, and some news...
  189.  
  190. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  191. IntuiSup.library                                               IntuiSup.library
  192.  
  193.  
  194.                             The missing DOC
  195.  
  196.  
  197. Note : this file is *NOT* a part of the IntuiSup archive. I write it only
  198. because there are some other users who will ask themself a lot of question
  199. about using this library, and may be are as I am, a beginner in programmation,
  200. or simply they wnt to know what can do this library.
  201. There are some things that I don't know about this library. So don't ask me
  202. what does one function do. It is only a summary with some comments.
  203. the (?) means that I don't know what exactly does this function. I don't try
  204. it yet !
  205. This file is more a 'How to use' and 'whre to find that' file than a
  206. technical one, where I can read nothing. All what you will read comes
  207. directly from my own experience. There is no Doc, except a brief description
  208. of the command.
  209.  
  210. All of this can be found in the example file semed in the archive...
  211.  
  212.  
  213.  
  214. I       What is the IntuiSup.library ?
  215.  
  216.         It is a gadget library compatible with all Amigas system from 1.3
  217.     up to 3.0. It is written by Torsten J�rgenleit.
  218.     The library can be found on Aminet sites, in the 'utils/libs' directory.
  219.  
  220.  
  221. II      What does this library do more than the others ?
  222.  
  223.         Well, for 2.0+ system user, this library is only usefull in the way of
  224.     how you program it in your code.
  225.     For 1.3 system users, like me, it is a open door to the 2.0 system without
  226.     having it !
  227.     Here are the features that IntuiSup allows :
  228.  
  229.         - 3D look,
  230.         - all 2.0 gadgets,
  231.         - locale available under 1.3 !
  232.         - and a Editor, but unfortunately, it produces C codes :(
  233.  
  234.  
  235. III     How to link IntuiSup with Amiga E ? What about the E modules ?
  236.  
  237.         This is a critical point. The only way for E user to use an shared
  238.     library, is to convert the pragmas and the include files into E modules.
  239.  
  240.     Pragmas : you can find the pragmas file called 'IntuiSup.h'
  241.             Beware, there is many 'IntuiSup.h' files in the archive.
  242.             Then use the Pragmas2module program to convert it. Place the
  243.             resulting 'IntuiSup.m' in the EMODULES: directory.
  244.  
  245.     Include : There is no IntuiSup.i file in the package. The only way to do
  246.             is to convert the include 'IntuiSup.h' (not the same as the
  247.             Pragmas one) with a C processor into 'IntuiSup.i'. And then
  248.             convert this latter file with Iconvert (which need the SAS/C
  249.             Includes and A68k). Place the result in the 'EMODULES:Libraries/'
  250.             directory.
  251.  
  252.     That's it for the modules !
  253.  
  254.     Note 1 : I translated these files in E modules, but modified some constants
  255.         (They are very very long : some are 25 chars long !)
  256.  
  257.     Note 2 : In the Include file, you will find a C structure for the gadgets
  258.         with a C union within. Just erase this structure, we don't use it
  259.         as far as we will use E lists and the GadgetData structure/object.
  260.  
  261.  
  262. IV      Is there something special in the use of IntuiSup ?
  263.  
  264.         Yes, it is the internal variable, which is used in fast all the
  265.     fonctions. This is the only way to the library to know where it is !
  266.     This is because the IntuiSup modify all Intuition messages by adding
  267.     its own. So it is not very painful to add this library in your code,
  268.     because all message will be send through intuition. The only minor
  269.     difference is to replace the functions GetMsg() and ReplyMsg() with
  270.     IGetMsg() and IReply(). That's all !
  271.     For the lists and structure/objects, lists must be 0-terminated.
  272.     (INTUISUP_DATA_END = 0)
  273.  
  274.  
  275. V       About the gadgets, how do we code them ?
  276.  
  277.         Simple, we will use lists to create our gadget.
  278.     The way to do it is :
  279.  
  280.     DEF gadgets
  281.  
  282.     gadgets:=[ type,flags,x,y,w,h,text,textattr,data1,data2,data3,
  283.                type,flags,x,y,w,h,text,textattr,data1,data2,data3,
  284.                .......
  285.                   0,    0,0,0,0,0,   0,       0,    0,    0,    0 ]:gadgetdata
  286.  
  287.  
  288.     Note that you must have at least in the 'emodules:libraries/intuisup.m'
  289.     module the gadgetdata structure/object. The union can be deleted. This is
  290.     the object equivalent to the C structure we must have :
  291.  
  292.         OBJECT GadgetData [
  293.             gd_Types,
  294.             gd_Flags,
  295.             gd_LeftEdge,
  296.             gd_Width,
  297.             gd_Height,
  298.             gd_Text,
  299.             gd_TextAttr : textattr
  300.             gd_Data1,
  301.             gd_Data2,
  302.             gd_Data3 ]
  303.  
  304.     You will notice that the string gadget need a 4th Data. You can add this
  305.     one in this 'onject' before compiling the module, but don't forget to add
  306.     a 4th NIL data in ALL gadgets...
  307.  
  308.     Entries :
  309.             Note that these entries are definied as constant.
  310.  
  311.         type : one of the ten gadgets (1..11)
  312.                  1 = Button
  313.                  2 = Check
  314.                  3 = Mutual Exclude (mx)
  315.                  4 = String
  316.                  5 = Integer
  317.                  6 = Slider
  318.                  7 = Scroller
  319.                  8 = Cycle
  320.                  9 = Count
  321.                 10 = ListView
  322.                 11 = Palette
  323.  
  324.         flags : 13 flags are available
  325.                 1    = gadget disabled (ghosted)
  326.                 2    = no border
  327.                 4    = Highlight with Complement colour
  328.                 8    = vertical orientation
  329.                 16   = Hot Key
  330.                 32   = No text Output
  331.                 64   = Text is displayed on the left  side of the gadget
  332.                 128  = ----------------- ------ right ------- ----------
  333.                 512  = -----------------        above         ----------
  334.                 1024 = -----------------        under         ----------
  335.                 2048 = Button toggle
  336.                 4096 = Button image
  337.         x,y,w,h : coordinates of the gadget
  338.         text : a pointer to a string or a dynamic string
  339.         textattr : pointer to the TextAttributes strutures or a list
  340.  
  341.         datas :
  342.             here are the meaning of the 3 (or 4) datas for each kind of
  343.             gadgets :
  344.  
  345.             Button :
  346.                 data 1 : button state : 0 = not selected, 1 = selected
  347.                 data 2 : button image (not selected)
  348.                 data 3 : button image (when selected)
  349.             Check :
  350.                 data 1 : check state : 0 = not selected, 1 = selected
  351.                 data 2 : check pad1 (?)
  352.                 data 3 : check pad2 (?)
  353.             Mutual exclude (MX) :
  354.                 data 1 : # of pixel sepring 2 radio gadgets
  355.                 data 2 : num of the active entry
  356.                 data 3 : pointer to a text array or a 0-terminated list
  357.             String :
  358.                 data 1 : length of the input
  359.                 data 2 : offset of the next string gadget to be activated
  360.                 data 3 : offset of the previous string gadget to be activated
  361.                 data 4 : default text that is displayed
  362.                          NOTE : this 4th data is NOT written anywhere. The
  363.                                 author says that there is 3 datas in the
  364.                                 GadgetData structure/objet.
  365.             Integer :
  366.                 Same as String
  367.             Slider :
  368.                 data 1 : minimum level
  369.                 data 2 : maximum level
  370.                 data 3 : current position
  371.             Scroller :
  372.                 data 1 : # of visible entries
  373.                 data 2 : # of total entries
  374.                 data 3 : cuurent entry (the top one)
  375.             Cycle :
  376.                 data 1 : # of pixel separing pop up cycle (?)
  377.                 data 2 : # of current cycle text pointer text array (?)
  378.                 data 3 : pointer to cycle text pointer array (?)
  379.             Count :
  380.                 data 1 : minimum value
  381.                 data 2 : maximum value
  382.                 data 3 : current default value
  383.             ListView :
  384.                 data 1 : # of pixel separating 2 entries
  385.                 data 2 : current entry (the top one)
  386.                 data 3 : pointer to a List structure/object
  387.             Palette :
  388.                 data 1 : # of bitplanes to be displayed
  389.                 data 2 : first color in the palette (?)
  390.                 data 3 : selected color
  391.  
  392.  
  393.     Example :
  394.  
  395.         DEF gadget,internalvar,txtattr,gadgetlist
  396.  
  397.         internamvar:=IgetRenderInfos(screen,RENDERINFOSFLAGS)
  398.         txtattr:=['topaz',8,0,0] : textattr
  399.         gad:=[  1,0, 10, 15,120, 13,'Button1'       ,txtattr,0,0,0,
  400.                 3,1,530,167,120, 13,'Mutual Exclude',txtattr,0,0,
  401.                                                             ['1st item',
  402.                                                              '2nd item',
  403.                                                              NIL],
  404.                 1,0,370, 15,120, 13,'Button2'       ,txtattr,0,0,0,
  405.                 0,0,0,0,0,0,0,0,0,0,0 ] : gadgetdata
  406.  
  407.         gadgetlist:=IcreateGadgets(internalvar,gad,0,0,NIL)
  408.  
  409.     Note that you can't pass this gadgetlist in the declaration of a window..
  410.     To display the gadget, you must call the IdisplayGadgets(window,gadgetlist)
  411.     function.
  412.     The same is to remove a list of gadget from a window, you must call the
  413.     IremoveGadgets(gadgetlist) and then, if you don't want to use anymore
  414.     this list, call IfreeGadgetList(gadgetlist).
  415.  
  416.  
  417. VI      Are there others structures/objects ?
  418.  
  419.         Yes :
  420.     the BorderData, which allows you to draw 3D border
  421.  
  422.         OBJECT BorderData
  423.             bd_Type,
  424.             bd_LeftEdge,
  425.             bd_TopEdge,
  426.             bd_Width,
  427.             bd_Height ]
  428.  
  429.     the TextData , which allows to pass text and text flags to some functions
  430.  
  431.         OBJECT TextData
  432.             gd_Type,
  433.             gd_Flags,
  434.             gd_LeftEdge,
  435.             gd_TopEdge,
  436.             gd_Text,
  437.             gd_TxtAttr : TextAttr ]
  438.  
  439.     Note that it is possible to make an E list of any number of Data, in the
  440.     form of the GadgetData above.
  441.  
  442.  
  443. VII     And about requesters ?
  444.  
  445.         Sorry, but I prefer to use the great ReqTools.library
  446.     However, requester and auto resquet can be made. There is no file
  447.     requester :(
  448.     The structure/object is called 'RequesterData' :
  449.  
  450.         OBJECT RequestData [
  451.             rd_LeftEdge,
  452.             rd_TopEdge,
  453.             rd_Width,
  454.             rd_Height,
  455.             rd_Flags,
  456.             rd_Title,
  457.             rd_Texts : TextAttr
  458.             rd_Borders : BorderData
  459.             rd_Gadgets : GadgetData ]
  460.  
  461.  
  462. VIII    Do you try then menus ?
  463.  
  464.         No, not yet. May be sooner than I'm thinking :)
  465.         The structure/object is named 'MenuData' :
  466.  
  467.             OBJECT MenuData [
  468.                 md_Type,
  469.                 md_Flags,
  470.                 md_Name,
  471.                 md_CommandKey,
  472.                 md_MutualExclude ]
  473.  
  474.  
  475. IX      You said, the localization is available ?
  476.  
  477.         Well, yes. As far as I saw in the doc, a fonction can create a
  478.         'Langage Text Array'. We can find in the archive '.langage' files, so
  479.         I suppose that's the locale is implemented ! But, looking at these
  480.         locale files, I notice that they are ASCII files. I'm not sure that
  481.         locale files are in ASCII form, but in some IFF form.
  482.         Sorry I don't try to use it...
  483.  
  484.  
  485. Conclusion :
  486.  
  487.         Well that is all, folks ! I hope that you will enjoy using this library.
  488.     I think more particularly to 1.3 system users like me. If some one else
  489.     is making a 'How to use' file ; please mail it me before end of July 94
  490.     (I'm returning to France, yes I'm French, studying in Germany !)
  491.  
  492. Olivier ANH
  493.  
  494. --
  495. -------------------------------------------------------------------------------
  496.    / / Olivier ANH   (ERAMUS Student)     |' And may the Force be with You ! '
  497. \ X /  anh@rbg.informatik.th-darmstadt.de |             - Return of the Jedi -
  498. -------------------------------------------------------------------------------
  499. From donews!crash!rbhp56.rbg.informatik.th-darmstadt.de!anh Tue, 8 Feb 94 07:47:35 PST
  500. Received: by bkhouse.cts.com (V1.17-beta/Amiga)
  501.       id <1rhd@bkhouse.cts.com>; Tue, 8 Feb 94 07:47:35 PST
  502. Received: from crash by donews.cts.com with uucp
  503.     (Smail3.1.28.1 #18) id m0pTeMn-0001P9C; Mon, 7 Feb 94 14:23 PST
  504. Received: from rbhp89.rbg.informatik.th-darmstadt.de by crash.cts.com with smtp
  505.     (Smail3.1.28.1 #18) id m0pTWXj-0000yhC; Mon, 7 Feb 94 06:02 PST
  506. Received: from rbhp48.rbg.informatik.th-darmstadt.de by rbhp89.rbg.informatik.th-darmstadt.de with SMTP
  507.     (1.36.108.4/15.6) id AA16120; Mon, 7 Feb 1994 15:02:03 +0100
  508. Received: by rbhp48.rbg.informatik.th-darmstadt.de
  509.     (1.36.108.4/15.6) id AA05063; Mon, 7 Feb 1994 15:01:37 +0100
  510. Message-Id: <m0pTWXj-0000yhC@crash.cts.com>
  511. Date: Mon, 7 Feb 94 15:01:36 MEZ
  512. Full-Name: Olivier Anh
  513. In-Reply-To: <m0pRJYz-0001LPC@tsunb.ctn.cogs.susx.ac.uk>; from "Robert Dabell" at Feb 1, 94 11:46 am
  514. Mailer: Elm [revision: 66.25]
  515. From: Olivier Anh <anh@rbhp56.rbg.informatik.th-darmstadt.de>
  516. To: AmigaE@bkhouse.cts.com (The AmigaE Mailing List)
  517. Subject: Re: LIST VIEW
  518.  
  519. Hi Robert
  520.  
  521. > > I'm try to have a list view with the IntuiSup.library
  522. >                                        ^^^^^^^^^^^^^^^^
  523. > What exactly is this, and where can I get it?
  524. You can get it on vertain Aminet sites... I found it only on :
  525.  - ftp.cs,tu-berlin.de
  526.  - ftp.wustl.edu
  527.  - ftp.etsu.edu
  528.  
  529. The archive is 571 Ko long !!!!
  530. You can find my an updated doc in the ML of E
  531.  
  532. Bye !
  533.  
  534.  
  535. --
  536. -------------------------------------------------------------------------------
  537.    / / Olivier ANH   (ERAMUS Student)     |' And may the Force be with You ! '
  538. \ X /  anh@rbg.informatik.th-darmstadt.de |             - Return of the Jedi -
  539. -------------------------------------------------------------------------------
  540. From donews!crash!comlab.oxford.ac.uk!ecs.oxford.ac.uk!m88jrh Tue, 8 Feb 94 07:49:17 PST
  541. Received: by bkhouse.cts.com (V1.17-beta/Amiga)
  542.       id <1rje@bkhouse.cts.com>; Tue, 8 Feb 94 07:49:17 PST
  543. Received: from crash by donews.cts.com with uucp
  544.     (Smail3.1.28.1 #18) id m0pTeNh-0001OoC; Mon, 7 Feb 94 14:24 PST
  545. Received: from sun2.nsfnet-relay.ac.uk by crash.cts.com with smtp
  546.     (Smail3.1.28.1 #18) id m0pTYu6-0000qwC; Mon, 7 Feb 94 08:33 PST
  547. Received: from ecs.oxford.ac.uk (ecs.ecs) by comlab.oxford.ac.uk id AA04992;
  548.           Mon, 7 Feb 94 13:32:38 GMT
  549. Received: from ecs.ox.ac.uk (booth29.ecs) by ecs.oxford.ac.uk (4.1/ecs.1) 
  550.           id AA15531; Mon, 7 Feb 94 13:35:46 GMT
  551. Received: by ecs.ox.ac.uk (4.1/ecs2.0) id AA00903; Mon, 7 Feb 94 13:34:15 GMT
  552. Via: uk.ac.oxford.comlab; Mon, 7 Feb 1994 15:39:37 +0000
  553. Date: Mon, 7 Feb 94 13:34:15 GMT
  554. Message-Id: <9402071334.AA00903@booth29.ecs.ox.ac.uk>
  555. From: m88jrh@ecs.oxford.ac.uk
  556. To: amigae@bkhouse.cts.com
  557. Subject: Re: Problem child program
  558.  
  559. Jeffery C. May wrote in with a problem, and supplied the complete program.
  560. Although it seemed to work it was giving Enforcer hits, which he wanted to
  561. remove.  Now I don't have an MMU so I can't run Enforcer, but here's a little
  562. look at what the problem might be and two possible solutions (amedex2.e and
  563. amedex3.e).  (The complete lzh archive is pasted on the end...)
  564.  
  565. First off, Jeffery had:
  566.  
  567. > /* Database template */
  568. > OBJECT entry
  569. >     memberNum[5]:ARRAY
  570. >     first[40]:ARRAY
  571. >     last[40]:ARRAY
  572. >     business[40]:ARRAY
  573. >     address1[40]:ARRAY
  574. >     address2[40]:ARRAY
  575. >     city[30]:ARRAY
  576. >     state[10]:ARRAY
  577. >     zip[10]:ARRAY
  578. >     phone[20]:ARRAY
  579. >     expires[9]:ARRAY
  580. >     computer[20]:ARRAY
  581. > ENDOBJECT
  582.  
  583. Well, this isn't wrong, just a bit large (especially if you want to reserve a
  584. block of 1000 of them...).  It would be nicer to just store pointers to the
  585. strings in this object, so this is the first change:
  586.  
  587. /* Database template */
  588. OBJECT entry
  589.   memberNum, first, last, business, address1, address2,
  590.   city, state, zip, phone, expires, computer
  591. ENDOBJECT
  592.  
  593. (In retrospect it looks like Jeffery really wanted to have E-strings in the
  594. object [something from a STRING declaration or String() call], but this will
  595. do for those, too.)
  596.  
  597. The next problem was reading a lump of memory from a file (in read_list()).
  598. The code is OK, but then Jeffery tries to use the lump as if it were a string
  599. (a normal string not an E-string).  As it stood, the code could run off into
  600. unreserved memory because the lump was not NIL terminated (so it wasn't really
  601. a string).  This can be fixed by making the lump one bigger and sticking the
  602. NIL at the end, so this:
  603.  
  604. >     flen:=FileLength('current.dex')
  605. >     IF (mem:=New(flen))= NIL
  606. >     ...
  607. >     IF Read(file, mem, flen)<>flen
  608. >     ...
  609.  
  610. becomes this:
  611.  
  612.   flen:=FileLength('current.dex')
  613.   IF (mem:=New(flen+1))=NIL /* We need extra byte to terminate string */
  614.   ...
  615.   IF Read(file, mem, flen)<>flen
  616.   ...
  617.   Close(file)
  618.   mem[flen]:=NIL  /* mem can now be a string (but not an E-string) */
  619.  
  620. Now Jeffery commits a real E sin: he treats the lump of memory (which isn't
  621. even a string) as an E-string.  This is because he uses it as the first
  622. argument to MidStr() (see the Reference.doc).  I don't know how he gets away
  623. with it, but he does.  This will undoubtly cause memory reads from unreserved
  624. memory.  And in fact the MidStr() was overkill: all he need do was increase
  625. the pointer "mem" appropriately.  Also lurking in the code was the invalid
  626. call to Val().  The second argument *must* be a pointer to a variable (or
  627. appropriate memory), and not the value of a variable.  Therefore the second
  628. argument should have been "{a}", not simply "a".  So, this:
  629.  
  630. >     tmp:=InStr(mem, '\n',0); MidStr(st, mem, 0, tmp)
  631. >     numEntries:=Val(mem,a)
  632. >     MidStr(mem,mem,tmp+1, ALL)
  633.  
  634. becomes this:
  635.  
  636.   t1:=InStr(mem,'\n', 0);  MidStr(st, mem, 0, t1)
  637.   numEntries:=Val(mem, {a})  /* Must pass an address {a} or NIL */
  638.   mem:=mem+t1  /* Now mem points to start of next line */
  639.  
  640. or this if you want to check that the number is valid:
  641.  
  642.   t1:=InStr(mem,'\n', 0);  MidStr(st, mem, 0, t1)
  643.   numEntries:=Val(mem, {a})  /* Must pass an address {a} or NIL */
  644.   IF a=0
  645.     WriteF('Number of entries is not a number!!\n')
  646.     CleanUp(21)
  647.   ENDIF
  648.   IF (numEntries<0) OR (numEntries>MAXENTRIES)
  649.     WriteF('Invalid number of entries!!\n')
  650.     CleanUp(22)
  651.   ENDIF
  652.   mem:=mem+t1  /* Now mem points to start of next line */
  653.  
  654. Now we've hit the FOR loop in read_list().  Generally, Jeffery does something
  655. similar to the following to read each entry:
  656.  
  657. >         t1:=InStr(mem,'|',0); MidStr(list.memberNum,mem,0,t1)
  658. >         MidStr(mem,mem,t1+1, ALL)
  659. >         IF (tmp:=InStr(list.memberNum,'|',0)) <> TRUE
  660. >             jnk:=(list.memberNum)+tmp+2; StrCopy(jnk,'', ALL)
  661. >             ENDIF
  662.  
  663. This commits the same MidStr() sin twice (the "list" entry elements were
  664. ARRAYs and so cannot be used as E-strings).  Then something weird happens with
  665. StrCopy() and "jnk" (which is a pointer to LONG ???).  So "jnk" is not an
  666. E-string and it's being used as the first argument to StrCopy(), which is the
  667. same sin as the MidStr() sin.  If the entry object elements were pointers to
  668. E-strings we could use StrCopy() or MidStr() to copy the string from the
  669. memory block, but as it is we can use a more sneaky trick: the | character can
  670. be replaced by a NIL to terminate each field in the record and we can use the
  671. memory in "mem" (being careful not to Dispose(mem) at the end, becuase we want
  672. to keep it around). [The second solution copies the memory into fixed sized
  673. String()'s, which is arguably better.]
  674.  
  675.     IF (t1:=InStr(mem, '|', 0))=NOT_FOUND
  676.       WriteF('Failed to read member number for entry \d\n', a)
  677.       CleanUp(23)
  678.     ENDIF
  679.     mem[t1]:=NIL   /* Turn | into a NIL to make it a string */
  680.     list.memberNum:=mem
  681.     mem:=mem+t1+1  /* mem is still valid */
  682.  
  683. Notice that there's a bit more error trapping in here, too. (The constant
  684. NOT_FOUND is -1, and is a handy constant to define [you could use TRUE I
  685. suppose but it doesn't read so well...])  N.B. DON'T FORGET TO REMOVE THE
  686. Dispose(mem) FROM THE END OF THE read_list() PROCEDURE IF YOU DO THIS.
  687.  
  688. Next up is a bug in E v2.1b.  It's been fixed in later versions, though.
  689.  
  690. >         list:=list+(SIZEOF entry)
  691.  
  692. This ought to be replaced by:
  693.  
  694.     list++
  695.  
  696. because "list" has been declared as "PTR TO entry".  However, in v2.1b it
  697. doesn't increase "list" at all :-(  Since I am lucky enough to have a newer,
  698. beta version of EC I can reveal that this has already been fixed, so you
  699. should be able to do that in v3.0 when it arrives.
  700.  
  701. Well, that's all the potential Enforcer hits I could find.  The "amedex2.e"
  702. program uses the above method for getting the fields from the records as is
  703. nice and similar to Jeffery's original program. "amedex3.e" does what I think
  704. Jeffery was trying to do, using fixed sized String()'s for each of the fields
  705. and copying them from the input.  It uses ReadStr() to keep memory usage to a
  706. minimum, reading a line of input on each go.  It also tidies up all the error
  707. processing by using exceptions (which might serve as a useful example).  Be
  708. careful to spot the automatic exceptions on String() etc.
  709.  
  710. The uuencoded archive follows (with Jeffery's original "dex.e" and database
  711. file "current.dex" for completeness):
  712.  
  713. -------------------- CUT HERE ----------------------------------------------
  714. begin 644 sol.lzh
  715. M'?\M;&@U+3L(  #4$P  N6Z&+2  !T%-141%6#)(0P:R<Z/:-MJ9_.1QWJZ[
  716. M(RJ%)I8:_QIV#=ST;M6*54@)QRVYYHW3$EQ<A;4?2M]U<CC?#;=+,IX'9L55
  717. M198P80JLA99"RH()J!4:(1X!2TB%-%/ P,JL"JIBJB4*/7149!J)R?_?_]TZ
  718. M8LFF$*[)#\ "/%?#)<CN]Z21IRO %7_0%OS(&/S.@./_(U;SD SW,&U EL ?
  719. M(?.+8VE<@CSB[Z%.39JUZ,UX$_"Z'UGH(\+/QW?!+C>?ZR/.T/W6C^%^ ,1,
  720. MEO_,/'&_.7K\QV_+TU0M\XN>[@E]F'6D\,FP-91^F;^=HE]BWS@^X.#EW&<%
  721. MXK9H\[/]@=G/4 .OVL'*'!GC@I,8.0.#BC@D8P?7'!^V\?B+<<;M)W<EIPW\
  722. M23+M8\:\E)2L (TB9-C3(TF0Q@J2DE>-&XNEHK]*9QDTU6+X) &':QRTX6(6
  723. MBI8/(Y?7</"T73*8'',Q?I.&8T],S-W,<M C51NXA$W(W;H<>U(U3S' [,6%
  724. MW@UY"]>4O7/-7:/"]-1J.MP7%P-_E.7A>LCXZ[@?I?HN?/QCHFJ1FB"T!+/6
  725. M1FH^* *ONA3J\MZ(AKL.Y]L&;M_GY0NE .$+4T"(0P!YPY,J^);RHJ1/#BW\
  726. MF5@$MX\>3Q4C,#)P)4J3*)N(\2SLVH ] CS/RG;_0%'UOIF1ZK4Z;^B:VMEY
  727. M^.PF6\":FG%E$^89 -=/>IFV(BMLD#;B*@CY!A>6A<^V7+[ZY+1@<-[;!7@$
  728. M#[K"-K>+-E2HLB9:Q(O( RU;](R#[Y^6F3ORT[J<]8"H@6><RP6-ZZX46_5D
  729. MF==[YE7,*0;/)TBS6SC6V$+M6O!C1XI+SWBO/6*^S\TVO$BTNV-WX'Z;U?M#
  730. M99FX4_._>#07=]42/2.,]YI*U9OLE6+(C2%")BNFJPA='$-<>WU%UC1%@M(Z
  731. M?$&F3IF*C6@NI:TW(G\7J%IJ?X48O]B::C;8YU'7G4?DKJ.GHJ-=)U1N:ZIF
  732. M BJW.WZ$ D?/G_$G.E@&#!)9F2:ITO6]@46V$VT!V=%ZOJ5T'0.K; ="W70/
  733. MM%S"('Q;8<4>;.?D#I\S3>VC-O[P7'R4R"V>5&BRR1I9)$F81(D@^4P]O9=@
  734. MY5^*<P^FORUR&TXWCA\C&@SH.,<(GP:O+XA\%P!-O.Y,*<+-W["S)X4CCI1X
  735. MT1=0>XN])5X1U7M3JO>KJN?/]0M W)\;>.;L:JR%A>899BYO,O@V)VAJ@W;G
  736. M"K432U-M[K$/L^TU7!8:KL^9HM5;3BC^':_08T]KP4A>M$),DG?.2_BG&2XY
  737. M3%_QAU@,<S1:^MS-:XQR#\8Y-XY[:[I_=?6-O*).T2_=3ES#VQ:VZ^J+>,P+
  738. M=YJ"U.-*ES"2$K^+IBIYHD?<2_[C4X);C9'PNM0.,[ RS:XO^A_,9FV]FO=_
  739. M\0[3N$..E_PA=LA[&V.-^\,L]CV:A#0UB'LKS5(:;&G\#4(=Y-EQI$67+UW"
  740. MH'\'JMB<@OJA!;:Q!:^EW""E$B2A(&ZUR#L/RG&NV,L4)%0@M]8@['J=T@[O
  741. M7(+3-.-;(RQV&)4(-?KD&RU2#>,&E]J$'BQIF!W1Z?R>J_',K6G8J#VPUAZA
  742. MQ-4>Q&![N]0>RYB4SX>X=9R#C/O3C^UJ#^RUA_L/1[C??)C*]T>L_S'&.W,K
  743. M:Q6H/2:P]:>SJCV]8'N]U!ZKQI,B+_GU;?]XAU=$XY(9:L_OU"*YUR+8]PBQ
  744. M>0K&$:Q/_\2:M;A[9F6M7UJA%=:Q%K.%JD6.QI]][O<>3?JS9@MQF8"OPD>J
  745. M3]PCV50CO/@(^4(Y?&AG9_)-"DW0PG\,,W%8A6=&15HZ.#VHY=K)FZD<GV/@
  746. MCDX#&U<>]')G/OU)4:9%-#]&*++EZ4B#5?-/#\FC-S9-%>2SHL)% \+LM(BY
  747. M"T+NR@GW[(\FVM$,T[X SM*+QW$O!_W_C]"=%N8+0<)'SH#.!6@*U[J"WMW7
  748. MNMEO6&O=;K>@]>[7K>5]>[8+>*U>[9+=_5[I%NHJ]URMR-7NNEGIKW7@S OC
  749. M:,Q_JO1IPPT-#WY'E:1!'?^BNU6EIO[&>/I#':VQ)(,[BAH!P,X'AIX6TCEQ
  750. MG.R'X!'-&>GI$@0K!,"T_K]&T0N_*>'GB1G=9NUQD9HMQW+A!R;@[07R>J,Z
  751. M[1=K<&>:K7FG:R1RY:,^XN4=\^>[K=/=YX#Y[O7SVYFS!Z1&ECRTG#T&:C-W
  752. M;EI(S1\03-;X37Q)SD# ];X3M1N1^3$+0LX!IL$M#Q)R,UV(YT4^J#YZ#1Q)
  753. M!M^P90D2FW<P90;MT6GSYU[5$9.0NYS?]JB'S\@N<WI@%T_^R_^3 +H(S7,D
  754. M$-R]-WK;V(L/YK8 L[ZC=X;;:!WZ;.ZP\$HV7(Y/,&O<* R:7'7#9$A-[$=3
  755. MOKUH-+Z][-WANFOX\E1-4/5]:]A^#G XXX;5PYVS.K!\XJ_T]&# Z/1@V_2Y
  756. M,_RHL#U<A/JPW2_Q((\W0B&E3Q^"M;@RY7I!70'X<S[4ZL_K_ /E^ADA"^JH
  757. M@3@<S\(E7RX7*4JM^)Y5-BLR<"!YR,VZPR0K1"4$P&]@(+\&]WY@C?('#KZ'
  758. MU[OEND,7EJ90__O1E.2#CV][:LQT;: !% +^3^/WOUSO&PH?4(RA_8/FXL/)
  759. M&M*^QQI4O?SPS,32O6@[/Y4/)&GAP\?46NZ4I&6JG975H%X@TV"ZO?*559T%
  760. MU;P;K"A]852!70NM,ZELY0_4/*%OWFTL%+'G@G2<P;3PMIME&G/L4Z"F;=\L
  761. MB'G80G,J,TW"F9H+\:\2U!2V< ZMBET*9*Y 6GJ57B^7<_V@@YKAS_0>/0P=
  762. M^>^;A^/0EH1H*#V Y?-'X@O-,D1;SV0?D2UL:#4M=@8  ,@7  "U;H8M(  )
  763. M04U%1$58,BY%,$L$]W.;T;C5O^//@#_R7DI'>=ZR2^H!"NI2]'/$#NDJDE.$
  764. M7JJMD>SION;UM/==EE*?&[__=;DDDXMM2J!5 @P(8(8QB&$81R0CX'&%#".\
  765. M/=K&VVWVNP%HRS8C*."SQ20F6<.QVJ5[O_(_QX0.E<N>D 1'BQ'ENS1.AD1*
  766. MI;H0F+\XIE(2=2G0-!!*/PK:/C7='KXT+SN@I8A5T/.B1T),L:1^9_-(@>*Z
  767. M&..*299Y:3]VTT:4J7'>NX,(<MGYW[N&_<?P/5JM6K2I"5?A4> ,R%Y0N)P+
  768. ME(J6\R[>P^2W>\-VT]V:U*E:?MD60E*A2['@PWPPWFF6Z"9HGQ^*"'F*;)D$
  769. M=4O!?O<81&0FHX):7+85&=AZZ?-4J8+GT/WK;>\YV-)*N./!=N<@]  YI4+/
  770. M;J4^:.7I"S*<P<IXHY<X6888\9EHC2#\LL<H<\'!P<Z:;2:<9W..$YD^&2I6
  771. MJE]Q0/<MC^VDW8>+C@)]-^X&AS&SJ#+'# H%Y3@Q74Z<PCR,"Y(7TDIWV]EX
  772. M1WJ'(\ 2G@\A?5A[9BYU>!"NFHSVDPU&FFL$G%.BXPM(5)&H[$-N.@A8J)AA
  773. M#$<(!6F!IEQQ&Z$8S0PYR($EI$EFD2NOO_NT2W;[]FT%JSAL]^S@?"W?O<H6
  774. MKF#Y0MW.1\&<+\ *Q9.TUR8,R0G2374)R:-\5>KX[& 5B7?_"U<Z"ZP\8N%8
  775. M>MCPN0Z>A>6I3QS2RBO7B@/YJ=#"XLJM86+G<-86 Q8")%7,=J)S^9<I@Q9Q
  776. M=&%&0ML1(23J:A9R3T-4QI4UA%W*.4PL4>UB]C%GN8FH!/.DBZH8ET+K$KZ"
  777. MZ(_;#UZ0Z=IM.A>Y+1)B:9FPGVM9QCTR+P@#ZB.[FLCA%%\4^U&IJ8\&2*7.
  778. M[WB_7K#9*K^P-U]AU<<),^ER'&PDO$03\=AB@B4&/B#&9()CS$TJ:A.E3%,+
  779. M8L:P'UO]EOD<8U" K[L/,@EDMIVFQ&E5SX@#E1 7E*'*PQJI,3D.-,$"P]\Q
  780. MH6=</I-]3C"#Y9A=^D,+Q8BRAY8?: G613L8 %$IGJNQ!HQ6QBPD^ =H<!"F
  781. MEF0P'U>M@FO6ZD]5-)-]VJX%Z_K\/>U0NM@ZN)\IH403B?407L&5?6,F.&C^
  782. M.%=9A^713P2A)(T)6HG !C]2K())%Q@8/*3SIW;%@HC  %L2L-8>K%&ITEFP
  783. M=W&1S/%XWO^5;(8?C?NE]N'A8,<'2B0$)0M!H6![(3PD[LI(1VK?"GZ&+?%N
  784. MFB1@SDZ4&6S"R^R'<33,\OBA#605B,D#T.O&<G[VA#_;;X:$0M:G76H:E(L\
  785. M,TJ0] EJ(D,QA0?A$;I.45(W5 I)$_%HF_,3;0%J$]<-;0WZ+&:EE&4:M%J:
  786. MOW00R?L"31'V(%=H1#SJ)"$X#G_C.]1?>E%O_?<BW2?[!YO/LJ.O^CZ[FX^B
  787. M'>\^:*=_K/CWMQ\4#K>?E%6EUGY[^X_*!U_I^5^L_/@_0_*^\_"LMNL^/AW'
  788. MP0VWGHRVE_@]>W5W'JP;[SV&Z5ZSTK;CT$:[SR9?!^RC3_8^Z^X^V#[>?K,#
  789. MUG"#^6[>WN/R?!\?Y#;GPN +SR?V@"@?_J@%MAN22N';AF:3;)<;$>?!>7,@
  790. M9XYAP38X28;? L):(3'">E@KAP:U&#.*\B#@X.!M;CLLE]&# 99MC"E#F+$]
  791. MEA=A<VB,RS99]2O>X4#7A%]53220H/ SS4O37B-PFW0=)Y682K*;RE=60SWA
  792. M/.GB#"(%Z89H.@X?_&Y0(!FR,5H/H*TJ9$TB&-0"AM 9S;T6?ZB/,2=+FQS+
  793. M%-Y &4?D5L!F'%2#=/*)PD^-9X.(O;9A5&Z&;*=,]?A+'$)*L-EAJ,O-AZ\H
  794. MV4XW;0LD)6CHFCF4&(<%ITD!!0=$S!D$80DC$+CBF*&5ECFA@).Y0:A>+&X/
  795. M.F @U$0/'(\XSV" >..3.WS-L<V6DJID#DI118I'G$X,2%ZQ64!W\L3&R H3
  796. M_C<GFTWHP+%[!^>)CV8RTFF"Q,QJ,3&..=UM749&BA\+7ABA4I/AAKK_-U88
  797. M;[L,4R-TPA]5]1ZL12W^;"79PA)RP]@.O N"],O1A4-6)+;=N:;X9QO8GOHP
  798. MZKZ0,&%_P!6])8\ZO1^/^HR2&EQ[JB\[+@-W3:*.[;"9W;6<>T":,TWII<'=
  799. M5$*[HG.>WOSYKW7')=VPUM*<?MA4ZE)SPKOKQ;@ UB+2J45:.:F4:,)Q1"A 
  800. M'>LM;&@U+<<(  !$$P  ZV*&+2  !T%-141%6#.$T <F<\/6-IN4_MQQSHXR
  801. M5T40II8KO1IDS<&-LRNNJ--4VX!76L=#2% ^ M&X1OJY&-]NC<P91&84PA19
  802. M+&MJ$(555561A+2FF$!\&554)A52BBRFVJJ-D*ZX1JIII<1&>$U,Y/?^]W3G
  803. M) Q<LE(MLEM#XX=[W62-.1X IOZ@K_, 7_F6(-O_(WMWP0964)X!+, V%FWL
  804. MS85P"//+LX<Z.R3K$9KL,;B]3\#T$=SF8CK;%PO6^!'GYO[K%_#_(&!') _F
  805. M&]&O.6]_?=/R]A,(&67,=0B_)$JR;<E0:BC]HW^Z1+UX&6'MC8X]IEA<)V"/
  806. M/S.N.3QD@#(T;'%&QQAL8J]CB#8],;$B]C\(V/L.WXBWJC5H.K4M&(_N9=X\
  807. MDR+A2*IP@D2IDV1,D2Y2]BDI%3].1OZ6"X$69Z<>.FO7"* 7[R26C#P"STJU
  808. MW)+\+=V6>Y83 O3,7^)NR'SV#,W<22Y)&B39O#)9#5MAMWA&D?*;CDQ87<#[
  809. MQ%O>*M[QC>[%V7L)-!QM\WM!K\=P[+VD=ZLX'??HM?6PCHEBC-$%H"6>TC-1
  810. M]  >NRX(_O1']YPFO!%I-Z+2>BZVY><F^ZE&FQWHCVKF"[EH]LS/QBAX^NM>
  811. MV#)T_S,8CO,QA]X@Y5 B$0 ;09L>/&4)]<FODW+0'H*X'-%!ZSF&RHKWAQ0J
  812. MN,ZWPJ_?"I]\7!'+W)'9<!K.,GXX!"71[O=RU+LD!2-%)MXW EJ<(D"3)E[^
  813. M*9OY-JHI+4,J+"P:!WE6\,JS),P]UG9-53!'T3',N.F&P?EHVO;_O1V%J6A!
  814. MW;VS9"N(/X[7MEQQL9YK$*PUC\['4.;G,='&T%Q/5[^:HI&E3'ES&X(/7X'U
  815. M]TWS#19&?;]C]X,Q;_V5VBL8H>-C& I-B6B(YV)9YA3XTH12@UG%'^W>%"G0
  816. ML(;O@%GI@V;'8Z"MJW GT<+B0YPZJZM.H/F>*<XG0\#YBY1$#GE0R/%T.*-S
  817. ME1S8VG/C=RJQ_,Q54KZ.<JUK&FQ_274\[.4[,^9KELSB&?^FP$AY1LK@^X7*
  818. MNPJ-XN3Z!]&_L_Z)]#_I/9'S/05=F*?R54:NVME? =0Y)\.T'#M1PN.JI3F,
  819. MY[JTSH$YOJLE=O-,-SNCD.2.K^<?RVSABJE1\X_)]Q5/U7='%MC6-M._\"]9
  820. MP](%ZSM'!;DZ1B: +UG6-<S#@VPG.05HD?.0_V$[C5";7(TPGN*03:8NB$_+
  821. M.$T%PFAJ!-I^GQ!/=:03:^[GA/S- )M?;.$VJX3:^$)[/5"=5AZ83<T@G4_B
  822. MT0G5G";9<)MM0)U/-\03>:03JO7SPFVT G5?<.$ZQ<)UGA">MU0FTYFF$P.$
  823. M_)-30OM )M/E.$ZU<)UNH$T.'X@FST@FTDG";0U.HQ]$)VQPG7KA.OU G49&
  824. MJ$ZE32"=3U\\)[G0"=3[QPF1<)D\(3W6J$T/CTPGM#A.L-39X6B$[(X3<+A-
  825. MQJ!-GA^()P]()H8)PG4G2+O0":'*.$W*X3<^$)O-4)U'3TPG7TF3T_+T0FQ.
  826. M$W:X3=Z@3I^9WPF,%^]!-\;L-QN(;M?MA[58@4/:&!K5@*1@65H$]B:(QSNX
  827. M?O0IK$AL6/:77:6738X. 7 %M;Y=@-;Z$J+<28Q)DLDM.-*)'D28QX56*%-\
  828. MABW$!A^=.H6R]FOEW%I+FR;DDJ7,(,-*-";P+@8@"7'(,(<I(C7C15!^PL@[
  829. MU.G60?FKH.Q1_QE"2+PZ2BK(_.!.Z60KY-FLA8*Z%;^?*O8LF1_D!;//BC<5
  830. M6(AIFJJ)#Y4V2R)I1.KG;"?!SES&N2)J1ACSIJD:3PB1QB;C)+A+H\8555'L
  831. M?=61_*30\#(Z_;R+R\D2DB-[YN21*TT'P5D';)TW@";NDY^*K&!1B7@ET4KW
  832. MPMWDFXT(PFGWNC&$S\[1_HQ9;27-[\6/_3_D6/3H#J[H#L+T7%JQS9M))Q"9
  833. MIYA-]M21,C&CKC UAR*7(2Q\U:*_/$;L)YJHI>>ND4%RVN\-A"/GV!XT=6*#
  834. MHW8!ETGCZ^\OO__AW!GB!3)6E"_C594H/D:J%*!S&JUI=]HU6U+MG&K64NN$
  835. M:M;2Z6QJU]+G5&J2ERGC5<4N,D:KFEPAC5=C*<[Q:-[^?@EHQ S<U;?;0\'!
  836. M*M(NA[*S5:"\=^?02,TK0'@MLR2P96F3FAM<L'9IHNQDEPG%4,XOW1FK:!(,
  837. M.MC@6C^'#L4+?U'9YH\9GN;KL)&:+<;)N@X-HKR5KGLC,QSW2NAGFIUAIG$D
  838. MDN.CC6EJCLWSW9;)[Y?E/GOF/GMK-F)S9@Z:14;=Z#))DZ@%H(S2#35^ [W$
  839. MYP!@>K\""DV(_)@%R;""::#+D[B<C-=".<Y/FRYI,/[N5=>58@S-)O^/G?!!
  840. MYZ%K2/]E: U[R),BQ8F/Z^>@S;RP:_L&2_%B[9Q"4#Z;DM'H3KIB1@X"WG-O
  841. MVI(?9Q"Y;:B.[!_Z[_ZD$N:C-<2P0LGIND]M7"U/FM0"PNY]O?M=:&QCLK:_
  842. MOBC1<#<\L?>O2!@SM,@*HD-M7#B=G=,Q\OKKN6]^Y:?FZR4=,.E\%U$\[+!O
  843. M>AKF[CR&5,#YO3>_APH.'APH'Q<3&]2-!Z6)'[,1RM\,6.R$+DTM^ ?2; PX
  844. M_M!XT%^'+Y4ZG_M_ /K<SK!#^\D@3:\O\HE7C0^.DQVASB-JR)M8/)1FVU^2
  845. M'8H*!,!M6B"_.NMH8(W:!PZ^B9%OR'*'3Y"6*/[Y(RXI!MX%T\&<_?-8($2 
  846. MO1_CSOUSMYQ8GQD81/5/>].)UA]Q;OJCY2NO>B&8G%NF8Y/ZL3K#YW<3J]]:
  847. M[)*@9:I=Q96@7TA\UJRO?),:?J+*W;6W%B=H52!7(NM,ZEJX0_4.N5M]#6UJ
  848. M5=T CT'$*Q\_6^0DSZ%='R4N[;\@B')XHG,IW5LG+1X]&*N"SLBT>Q?FU=WK
  849. M#I>^E7MZAPTMK\WPS;5^#"[KVMD#08 GM)A;W[=I6"_/U>,3:;* 9^=O?IEB
  850. M9!]0> .L7HFTMC\/;@V4D_<JOW,CJ;/JA%S_<!^3+6QH-2VS!0  /Q,  $=C
  851. MABT@  E!345$15@S+D6"Q 1K:YO5MM7/G?P!_VX;'L]K)#' 1#$G9'-F$C<3
  852. M;FU-ME5ZU^FK6<;B;;+;C'QN__][SCKEMLJ1D' "#B. YS@.\^!1 X=O#M+&
  853. MVXM_P!B-2;C-0<*3Z=4AJ3AX-]9[@^MO#"!Y:9^A8 TGT\9YW:M+ :(YZ*6 
  854. MD,7SQU41RGHH8 T44XX+VO#?8';\D=/0P%%(I5@/?'J8#5RS2CC/SZHQTK <
  855. MDVG552>=9MW$E:++"RF&:4=K+30&B:<*(_>>@)M HF>.7VT$T.%YV"$(/3Q9
  856. M6\O V^[GRL_.P6?&X_!"SY+J,F1JS'P9X''6X("SBS9?A\K6+$^/DO5Z56>_
  857. M7GPN0_:S\R<<$+4+;-ZW?>ES,7@+%F\SSK;-].1OAS."AV?H2A'LN;/"V^/M
  858. M64W.5KA;=A?<'1WKMVZA]<IN>/35I"08J(?0(Y0BKD_HCD.!I8@FIY3SA50?
  859. M15(,0*X4ZX*"FL@O2*7O^1@&WL;/B&2[KT/%C>SNXARK#&[/E'Q-OOCH7WRB
  860. M*G!C<R-IPP"SKOE3C?;:Q)P^=K(I_D>=IWRJUSCKD*<+KW T^LL^TY WTHD'
  861. M,80(F!<79=<K0U:^+$.A=/S;?<3*)]SVH\J?>LMB;QC"JBG!FA?"%Y-5K 2U
  862. M:6QPQE2]QU:- TN+9GWL(:31CNP\S3N+(V+AHW;)+"Y YZ1A.E K^"R3:XZ9
  863. M*#P,EK@&4J<X&DYC=% <LTD5 #)$$2D57Z55B->,E!04YS1<19[A)#FGCI/?
  864. MBCH]PYASE7?(<TN?4+.\T<D@:)SG YN3E"6:7Q"]@'D/I%G2H01YT-264ER2
  865. M95$TJ'Z_$5VTPZ46#;X<+>:%9$0C\_(?53'-*RJ/*-SZ"93'<WO1-/[@:%L 
  866. MRIWK4DDW(8M>#<\XW&^N+O=[UR[S"%&3GC=TYC'[K<36H%RO5*/2Q5O?K^WR
  867. ML!*F<,34+7 T-'>-][*&)R#[ 10 C1?LA43JZ8X63O*B\K1$4NHMD]2K*O9@
  868. MKKLHI]5^[9F,P%.D>+:F\._+=X&45 [W)5/.,@_'$?G&!+V3$30HF:,8;CXK
  869. MX:ZKA;$DFNR-+JX"Q 7!4-WV$P2X0^9MT'S1T'N5V@E$^RL# SYS27"Y:?O-
  870. M^"Z4X9F[V;@;DU>RY9N_INK@\_;X?JZ:U^Q!(O(0WZ;%:[. #&*$-@9O%;#8
  871. MBUE77=;U%%2U[$1D_%[2G4NA##&' S=6UI*F]@9<E)*%OF WOAO(D,N-^]?&
  872. M)V(U'#FE'%/;QZ^K' RKASMZ*DZC+'$E26Z]+AZY[>(EO8TM-[PWO\:A':?:
  873. MTB.K_:T%?;O_K.%WRVLV7:=M9I( O<S-8'FUG:^^#:T-@*?<TM816UI:P.&U
  874. MI; H?R:6_W-+?_)I;__M*0DNUH2#,;6=2)QW,R@6_:S2!$^UFU#!]S."-UM9
  875. MH15^UF$#F=S+((#VLP@9[M9I1"_<SBB3MK/*'G[6@UDR?^L-44WV6(J(R]UB
  876. MJM;_#2I !E\^'J&-)#VB 260'OF&(!=_'< XM$XH)<HCG;LA*?MY$&9:Q%Y)
  877. M-I1#,@I^P4QGE-QBAJ9@F$,"A)B*%7MV9!0-FSPS521"-#I0(0(%\/?(0YLZ
  878. M08O8@!"D;-^[V; (Z$(XRD7V(! 4;8@G)?N-)'W+O (TA T:P*IU(H0C^Q$X
  879. MRB*>6(\0:ISZ34U3GDZ$'($D#5(\VQ#)+&6H?+'0/8;[0[_P[Z")WY[M(P7X
  880. MR%,D@N=1Y3XL.-%J9RCC3;A_9!U#"=9Q 6)(J2'\D'=A8!)!<S )%@B7.[:S
  881. M$\+-H_Z:JL?TZWZ$#^DFD[85)*6E58B#Q-84(T+Q!4%-T]936]=L*ECZ!8<;
  882. MVSTP4Q/54Z[,JTYW4=_H.KU[BCX?O_5EW>D8LH\:'4*X8#8(!ZPM5H-/MW]H
  883. M$?I[N+>R=74UV[K7T*=7+_T\="_]<8U9>2R/ R'7V\;BJN A:BUL:#4M  $ 
  884. M ' !  #4N$$<(  +0U524D5.5"Y$15A'" $D6Y>MI1[G/ &R/ +P:%MU0+R:
  885. M HI$D. D>;YCYM84OV?UPP9_QOPKS/6T  &"G3B9GI36/'BFP.J:A([( KUE
  886. M=.$[YBHN*MPUVR*)6=49G6K8$2D*M$#KB**3S"![[SDFJI*5M92G>Y;O!3\K
  887. MJ,[FYD=DI7D?E2KG"P%-6M>1;EIB[:]D.0IY1B,MXG8FT0KMF8BK:9<+ZYP*
  888. M5R/>JKZ"(@K2<.G^S>]S4R_;-W\S>]Z:RMDK'N,(3(\:>Q3NM#Y2J,87%*CT
  889. M*,0EP$T8SQ6KWA*8G=\ ?).YC:-":2,.D,)GV>M:QK/UZYV:AE.";\>O30=_
  890. M/GUPYC7@$*ZU,0 9/BUL:#4M# @   @5  "UDT(<(  #1$58[A(&='/#UC:;
  891. MEO[D<<Z.,<=B:BFE$;T:9,V5UM@C7&FF2;<"66*WI;)* JC7-A&^LD9'V=;F
  892. M*E$)DIA"BRUMU$(50LA9",):4UPBBWQ50F%5+$(3QJJKLA;&%,D\9ZD4SLS4
  893. M3D]_[GSZ$@,H%EN^#B5*[Y9NW=8VU)90"E_V$_Y8"GU-]T4_^#<W&^!;L+5R
  894. M!+( ^T[:61F5J!_,+8VTB$M19GQW 2<+H>LZ ^ZSN.WM"XOL_ ?S,_^=@\MO
  895. MUAB0B/?\ANAKR$^?Y6[PO51![FESF]J7K/V)/,)3FHG_B-^;GE^-[FA^D4,J
  896. MSS0W:.O/YF=\8N<E  ["2&O30](4,D4,!1#CBAYXH2*(?A%#QW#P1;T1JS6]
  897. MN6<_>7<3TW,.\W<6!%]0+R_C1[R->1+]1"A%@(^E>;S08M[ C>E"A(J5P@ &
  898. M&YAEG6V(68A6N(9?A:."S&RR,& :Q?XFBT>/5-9NUAEED7H,FEL38#5N!3N2
  899. M+X64T%S&PO=CSQT^?23YR3<[!P7JH+Q;<%I9C7X35P7)/W2=P/X?WV_LXJ4)
  900. MI#XZ(-WF=^X0B<)?R3XY_G@E=2LV70G4LIT(K975OV06BR\D;KP"Z&UTXAS\
  901. M <;B)%OB/8L& 3S(.]B1?4(]APXF\@&L-)MHL6)%)KX=W7UZ\ = 1QG<EN\S
  902. MQA]5?FAZ*]*-M34YZO.XZD99/H\*%!BD^^: +^V^NS.(B^N@ PRC)S0>KW*4
  903. M3 _\!B"7)M^R65XUN68^W#JR!F /OU(AXSPLM20L=Y'BQ8-_&<W<'? : ^)T
  904. M30$6.<3QRSC(:K=)G?EI'>U4>VUU!WJ,0UY7T'=,YP 8X6@:ZK:&IJ06L7VE
  905. MY#@DW:1I3-$\T\N>:6-H9O$DS=,:O)]U-+_H:*TV$7R_Z@N&]?KB19J0S\C0
  906. MEL^X^(C!O[R_0)"&=+TA#K.MH"%CQ4YC,&P.:E'Q!IHZE8F\ Y.2L38I?<]L
  907. MLY#O2,<!]WW)'@I2-FE(]DG(YU"1IQ.D-CS2EX*#5:9_12@=5EB[L#7AB[S)
  908. M]D\]6->6E&=:+"RGIQ1Y22-\*,<;.=R$T]!;+N) OI4@[DIN_'-CC16#(S85
  909. M^0)?RKX%Z-$)X.@$_13"<HD/.Y+V20[N!=+)_K.#V@O0G\KM3^[27J0'OREC
  910. M,H'UA(*/PV[[.@XR?;++NI J\D8ODZ+^;"?/D;#',__])+'B4"3&7)1?*;!\
  911. MY-8<]4FL#80V7;@O@F+3NE'::+K]95J<M4JZSWE"JY5*M3UE2K4XJ15<ZA5U
  912. MGE]XJN?_E76JE5A*4*NW\)57JE5?V$BKM]0JL,#O%7;ZI57VGA*M6H5=^J55
  913. M^S\)59I%7?ZA5J>1WBKO]4JU"*I5J;*@56H]:D.4J6:CT%2S46)E_S0GOSE?
  914. MC=TNV5%Y^LPG?F5,*_T-(P]-4PG;Y4PG;E0P]/4,-1UM,P]/5,-/B*F&HWVD
  915. M89:IAI^*J8:? 4,,O4,)V?IF&7JF%=D*F$[BZ1AS%3"NYRIA7<10PYGU&'6Z
  916. M9AS-4PTTI4PT_.T3"L!4PTW45,--S:!A[<)\$YL?G,.B\_^,*Y4PKNII&%FJ
  917. M85N4J85LE0PL]0PKMSIF%GJF%:U5,--E:1AUWA,+'OF&Z4,-+\BAAUVH8:; 
  918. MTS#KM4PTKY,PCLLY^UC: 3[,G@&U.]P.IM?A\O#GC$9GPD]HS/U2M#9LS*"'
  919. M2V"Z^)'[FP3^3Z=@F^4=6GS;!,D(4'XXMY&@FV81@.LQ=#8/TF D$S:[<U5P
  920. MGM,9BD1.[6S%Y$_9BK)"3^L2VK,_6JSKX3SH;4W7^G@_5_);@-/5WFB^CJ*1
  921. MKK='2QC7.T=$Z-=AH]]<:_=[H8HV='L=BCK:/5M%'K:/2?%&2CG1%&UHY Q1
  922. MMJ.#44;@=V7NJ&\%\&!><_#/]_Z=IBEM#1@?Z$[C9O;P9CX&.:;%>2("VSEY
  923. MX;;-!P;P+-A#+BM:D?!RY@^![FD?6U;" L[V,:P.N?5<)>!='P),>LQ3XXW4
  924. M[!H<8<TLM-3UQ\!7,;S\*/*19F\!R2&64?)L[<^Q=NMCL77D;-VZVCMU;QXR
  925. M,>,;<CEFM'0+4%K=Z6:?'(-.?X@GS9#4# ^?X@]!D1X3$++KWQM[R67YL@^.
  926. MW$<T(^B#MT"YI$'!W$!@UM8H;)L6=S9%[2$6-00K+F0R_D@=YV.7-93@"X><
  927. M1Y]M\7/-X.5-W8?Q[*3VRHO?T/+497L'1N@:RKAM'Y3  K[Z9<X;"K#QX2VX
  928. MP\$HT6HJ>,//7H L76?8"I);,JX6FQO5P\7=[EW.&V7_MR$(2(>[\%Z_\G-!
  929. MI@!6-&OBK:4';2E]_&M7V-C6KWXN!)]6"^]W'A==^V3\::.4T+L;>90^&Y9 
  930. MLX7("J?/ XW%D4WR_V#[WM9 6WY$#B;;C?L$J\&VX2%)M9!C:*5:3;/O7/CW
  931. M&&2VL#HH1@95H@OR;W:F"-\<D'7;_L7/#;'<_AH=(?_7(CU,!3O;UR/2T=L'
  932. MP$0 O._OR^I(W.$__H18__.DMY[_('G ONB/%"]]Y^:Q.!>KA<_N/\@>.X?]
  933. M'N378H3335#+3EH%]$>-:G+W:%)3=!.6VEQA/\D92!6RE\IW\!QLLOL5=:A7
  934. M<T(4UK:V'E5?BH+N;70I:&9<\,AWKX0G,I\<V&&-GIXH\1R"%DT!M9%+GSB5
  935. M1PVGH4GG\&W_Y:@UJA7^TX=!@[5*N;#N.4%<1<,#IQ5\H^/ S#1$V*= GG2+
  936. M.666T\1"L:^4T>^YP(4PC<>U=[">+=R?'&Z'+!L,+6QH-2W.!   RA0  ,F3
  937. M0AP@  5$15@N19\G [-KF]6VU7^=_ '_<4;N:MCAC@LV>2=D<I ECJDEU E$
  938. M)ROTM>KC;3?H746^-___O-MR22B*7;A$*@M,"P'*'9#B.>'$=P[W1M-U^WMP
  939. M :R-O&]2@;@_1?J_T.@T>!V$[JX6X>?=#DE-('#)%EC#B-DQ#^EN',I<LCYS
  940. MFA!^$&UP^PTDK\4(5MUC%7#E?A.:1<&-_?\B4]/UO**"^[+IW<3LI@.;)' Z
  941. M<Q=#G!\K=C !H3R=B@#\R(>=W+DP_']5=J]>:^A'-C?DE/A\E7/QP._=Q8LL
  942. MK\)I9=7,Z\](/*QW\U;5S<[Y^S#\6CBE.(OPL:./[7X]7#'TQ0FPUM'&;U1O
  943. MBY,._H<,62/*,*LR6W=LI@6HI8<NW\ <37SMW<%ZVW?9!BK5JHB'=-SB,'9.
  944. MP.&"+$[ 'H=D?=Q0&E*)EENT4/P]OP6!QQ(E'*!XB2HA9+LAG:%Z!^4]?CP7
  945. M@P.)DII7ODBZPZS5(( RE,CI-0Q(((N<81O3LB'+D;%??-*N,E<>,:1\[(&<
  946. M!4M18T.444J4$S[!Z>B@J...\Y8#(Z_"JLHB'=NT"J!*S=-UJJW[?TMN6DBM
  947. M;<IAHLLR%VW<4G>95;FM*U.6*3J!H3D5;I#EI(Y*L5N22*0.9[Q>+FAJ+H@6
  948. MM0P+$!G8>2-5BK3QC+2W:FIX(Q5V24R+\QR=@ZW>R4.F*!Z5$+D%>:G<CZA/
  949. M$SYQ%P)6V1!.8#H0A&[WUE^ZJ0)UDI5GGY>J>#UE^6.*4RJ501 40%"H\_+Y
  950. MO%2_>;:LA9:P-<#5]L+5YSB"S;O_,%JW<;!"%X,5$L,XG2%AH2QP&A7&\F R
  951. MXW<%7U?&55WAH0!\01\D;-4?Z87#TP]4]1-QP45/@'%AUV;0L.X:'H/TJU.?
  952. M+)(,_=T?%'46HHA&DI-$!*'MH+P#XB(I"M-]E!:*"/UH"G:O-"0>FH!HF((0
  953. MS5@% 2NRY&:'20%W+EDHUB,>X8)J@B%6?AZ$1)^ ?%[WADLA]H!ZZ(FK>;SE
  954. M_7L=93(_%UUOP==B J@R5)CH,UZ[-N&^>15#YJ%!2JMY0XGWBY)3S!*JB@-+
  955. MGI\(==GT.P(674]4RL7"7V*EXQHR:N7)G>GP0S2$3Q6G+P.CQL%2C2V@OX&^
  956. M,&%*"*=C.*:GKT"<FONT>J-#[JKG8I@'VAAB@+SH)3_S0.U-%+O6#S><,%[D
  957. M;4S^;\K$6=2@MXR/=;R@++L11]BHHB]2IJ>=,G?@9D>W/WF+P,*69X%VE+VE
  958. M<L#?85D,O6522MI4GP^=A8H9^LN3IVTP3XX>PP4,_68)T[_S!6_TP5OY,%;:
  959. M8"S5]A<0R]98)*VE1&@SL*J69K*R$O:5QTW=A5)E:RF*3M**-9W84TLS654)
  960. M>TKS;,/^81<[/UER9-_[P:S;E?N+];]"_0T/?X/ID[^S"G*))E>/3M69\S8<
  961. MIO3K?(T+OORR*-=#7KGHSS*=U LY M_DMC /WUS]&S/FUKDZ)8[;O=FZ]VG9
  962. M%EFTZ NM\O\:=(8QX$ ?]M95 !$.5V;YCWSO.93S:2>C6O3K04Z"*WNT+^W4
  963. MOYI?7^?U/OG9L_!3M_QI<V9<%.3&&G&5#3AA][$HP 0I]F89O30%'F>[U]/C
  964. <D#1X%0T6*+?U7-GV'T_Y[Q414RE&6F>O[MK] +$H
  965.  
  966. end
  967.  
  968. -------------------- CUT HERE ----------------------------------------------
  969.  
  970. As always, I hope this is helpful...
  971.  
  972. ---
  973.    _____  _
  974.      /   / |    /  /
  975.     /   /__/   /__/      Jason R. Hulance
  976.    /   /\     /  /   <m88jrh@uk.ac.oxford.ecs>
  977. |_/ . /  \ . /  / .